package schema

import (
	"entgo.io/ent"
	"entgo.io/ent/schema/edge"
	"entgo.io/ent/schema/field"
	"github.com/suyuan32/simple-admin-common/orm/ent/mixins"
)

// ComboIngredient holds the schema definition for the ComboIngredient entity.
// This is a "through" table for the M2M relationship between Combo and Ingredient.
type ComboIngredient struct {
	ent.Schema
}

// Fields of the ComboIngredient.
func (ComboIngredient) Fields() []ent.Field {
	return []ent.Field{
		// Foreign key to Combo
		field.Uint64("combo_id"),
		// Foreign key to Ingredient
		field.Uint64("ingredient_id"),

		// 是否可选 (对应思维导图中的 必选/可选)
		// 我们用一个布尔值 `is_required` 来表示，true代表必选，false代表可选
		field.Bool("is_required").
			Comment("是否必选").
			Default(false), // 默认为可选

		// 数量
		field.Int("quantity").
			Comment("默认数量").
			Default(1),

		// 单价 (作为配料时的价格)
		field.Float("price").
			Comment("作为此商品配料时的附加价格").
			Default(0),
	}
}

// Edges of the ComboIngredient.
func (ComboIngredient) Edges() []ent.Edge {
	return []ent.Edge{
		// 定义到 Combo 的关系
		// M2M "through" table requires exactly two edges.
		// `From` represents the owner of the edge.
		edge.From("combo", Combo.Type).
			Ref("combo_ingredients"). // 这个名字要和 Combo schema 中 Through 的第二个参数匹配
			Field("combo_id").        // 指定外键字段
			Unique().                 // 一个 ComboIngredient 记录只属于一个 Combo
			Required(),               // 外键不能为空

		// 定义到 Ingredient 的关系
		edge.From("ingredient", Ingredient.Type).
			Ref("combo_ingredients"). // 这个名字要和 Ingredient schema 中 Through 的第二个参数匹配
			Field("ingredient_id").   // 指定外键字段
			Unique().                 // 一个 ComboIngredient 记录只属于一个 Ingredient
			Required(),               // 外键不能为空
	}
}
func (ComboIngredient) Mixin() []ent.Mixin {
	return []ent.Mixin{
		mixins.IDMixin{},
	}
}
